package com.xac.common.util;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.regex.Pattern;

/**
 * 处理字符串工具类
 * 
 * @author frank
 *
 */
public class StringUtil {

	/**
	 * @Title: isNull
	 * @Description: 判断字符串是否为null
	 * @param str
	 * @return boolean
	 */
	public static boolean isNull(String str) {
		return str == null;
	}

	/**
	 * 
	 * @Title: isNullOrEmpty
	 * @Description: 判断字符串是否为null 或空串
	 * @param str
	 * @return
	 */
	public static boolean isNullOrEmpty(String str) {
		return str == null || str.trim().length() < 1;
	}

	/**
	 * @Title: equals
	 * @Description: 判断两个不为空的字符串是否相等
	 * @param str1
	 * @param str2
	 * @return boolean
	 */
	public static boolean equals(String str1, String str2) {
		return str1 != null && str2 != null && str1.equals(str2);
	}

	/**
	 * @Title: equalsIgnoreCase
	 * @Description: 判断两个不为空的字符串忽略大小写是否相等
	 * @param str1
	 * @param str2
	 * @return
	 */
	public static boolean equalsIgnoreCase(String str1, String str2) {
		return str1 != null && str2 != null && str1.equalsIgnoreCase(str2);
	}

	/**
	 * 
	 * @Title: isContains
	 * @Description: 判断str1中是否包含有str2字符串
	 * @param str1
	 * @param str2
	 * @return
	 */
	public static boolean isContains(String str1, String str2) {
		return str1.contains(str2);
	}

	/**
	 * @param str
	 * @return
	 */
	public static String getString(String str) {
		return str == null ? "" : str;
	}

	/**
	 * @param s
	 * @param quote
	 * @return
	 */
	public static String unquote(String s, String quote) {
		if (!isNullOrEmpty(s) && !isNullOrEmpty(quote)) {
			if (s.startsWith(quote) && s.endsWith(quote)) {
				return s.substring(1, s.length() - quote.length());
			}
		}
		return s;
	}

	/**
	 * @param contentType1
	 * @param contentType2
	 * @param ignoreCase
	 * @return
	 */
	public static boolean equals(String contentType1, String contentType2, boolean ignoreCase) {
		if (contentType1 != null && contentType2 != null) {
			if (ignoreCase) {
				return contentType1.equalsIgnoreCase(contentType2);
			} else {
				return contentType1.equals(contentType2);
			}
		} else {
			return ((contentType1 == null && contentType2 == null) ? true : false);
		}
	}

	/**
	 * 过滤HTML标签，取出文本内
	 * 
	 * @param htmlText
	 * @return
	 */
	public static String filterHtmlTag(String inputString) {
		String htmlStr = inputString; // 含html标签的字符串
		String textStr = "";
		java.util.regex.Pattern p_script;
		java.util.regex.Matcher m_script;
		java.util.regex.Pattern p_style;
		java.util.regex.Matcher m_style;
		java.util.regex.Pattern p_html;
		java.util.regex.Matcher m_html;

		try {
			String regEx_script = "<[\\s]*?script[^>]*?>[\\s\\S]*?<[\\s]*?\\/[\\s]*?script[\\s]*?>"; // 定义script的正则表达式{�?script[^>]*?>[\\s\\S]*?<\\/script>
			// }
			String regEx_style = "<[\\s]*?style[^>]*?>[\\s\\S]*?<[\\s]*?\\/[\\s]*?style[\\s]*?>"; // 定义style的正则表达式{�?style[^>]*?>[\\s\\S]*?<\\/style>
			// }
			String regEx_html = "<[^>]+>"; // 定义HTML标签的正则表达式

			p_script = Pattern.compile(regEx_script, Pattern.CASE_INSENSITIVE);
			m_script = p_script.matcher(htmlStr);
			htmlStr = m_script.replaceAll(""); // 过滤script标签

			p_style = Pattern.compile(regEx_style, Pattern.CASE_INSENSITIVE);
			m_style = p_style.matcher(htmlStr);
			htmlStr = m_style.replaceAll(""); // 过滤style标签

			p_html = Pattern.compile(regEx_html, Pattern.CASE_INSENSITIVE);
			m_html = p_html.matcher(htmlStr);
			htmlStr = m_html.replaceAll(""); // 过滤html标签

			textStr = htmlStr;

		} catch (Exception e) {
			System.err.println("Html2Text: " + e.getMessage());
		}

		return textStr;// 返回文本字符�?
	}

	/**
	 * 将字符串数组转化为用逗号连接的字符串
	 * 
	 * @param values
	 * @return
	 */
	public static String arrayToString(String[] values) {
		String result = "";
		if (values != null) {
			if (values.length > 0) {
				for (String value : values) {
					result += value + ",";
				}
				result = result.substring(0, result.length() - 1);
			}
		}
		return result;
	}

	/**
	 * 验证字符串是否符合email格式
	 * 
	 * @param email 验证的字符串
	 * @return 如果字符串为空或者为Null返回true
	 *         如果不为空或Null则验证其是否符合email格式，符合则返回true,不符合则返回false
	 */
	public static boolean isEmail(String email) {
		boolean flag = true;
		if (!isNullOrEmpty(email)) {
			// 通过正则表达式验证Emial是否合法
			flag = email.matches("^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@" + "([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$");

			return flag;
		}
		return flag;
	}

	/**
	 * 
	 * 时间转换为字符串
	 */
	public static String dateToString(Date date) {
		SimpleDateFormat df = new SimpleDateFormat("HH:mm");
		return df.format(date);
	}
}
